网文收录小工具 semo-plugin-read
前言
上一篇准备了两年的 Semo,今天正式跟大家见面中,已经首次跟大家介绍了 Semo,相信大家看完之后应该还是一头雾水,不知道 Semo 到底是个什么东东,为什么要用,有学 Semo 的时间,自己不是也可以撸出一个命令行工具么?所以,本篇还是不打算讲 Semo 的原理,还是再讲讲应用吧,今天给大家讲讲另一个用 Semo 写的插件:semo-plugin-read
。
背景
相信很多小伙伴对掘金都是大大点赞的,里面有各种大神,大牛写的长文教程,极大的降低了新手入门的门槛,面对一篇又一篇长文,你是否有收藏的冲动呢(比如收藏到有道云笔记)?虽然网上有各种文摘工具,但是还是想要 Markdown
版本,不像语雀,掘金貌似拿不到原文 Markdown,所以,这就是今天介绍的插件的开发初衷,当然实际开发以后就有点收不住了,:)
思路
整个开发过程,作者一点冲击核心问题的想法都没有,就是想整合,找最好的工具,解决我的问题。所以,首先要找一个能分析出网页主体 HTML
的包,然后再找一个 HTML
转 Markdown
的包,最后,再把 Markdown
转成想要的格式。
当然说起来简单,但是,每一步都是个坎,今天不具体讲遇到的坑,就跟大家说说这东西怎么用,如果感兴趣可以去看看仓库代码:semo-plugin-read-mono,以后有时间可以拆解一下。
安装
必须要安装 Semo 命令行工具 @semo/cli
和 semo-plugin-read
这个插件:
npm i -g @semo/cli semo-plugin-read
可选的,我们可以安装一些 read 的插件,这里能看出插件分两种,一种是格式相关的,一种是数据源相关的,后面假设这些插件都安装过了。
semo-plugin-read-extend-domain-jianshu
semo-plugin-read-extend-domain-juejin
semo-plugin-read-extend-domain-mp
semo-plugin-read-extend-domain-zhihu
semo-plugin-read-extend-format-editor
semo-plugin-read-extend-format-epub
semo-plugin-read-extend-format-mobi
semo-plugin-read-extend-format-puppeteer
semo-plugin-read-extend-format-wechat
帮助信息
由于还在频繁的开发,所以具体选项可能未来还会有变化。
$ semo read help
semo read [url]
Parse and read a url or a md file with your favorate format.
Options:
--format, -F Output format, use --available-formats to see all supported formats, default: markdown.
[默认值: "markdown"]
--clipboard, -C Input from clipboard
--proxy, -P Proxy images to prevent anti-hotlinking.
--port Web server port. [默认值: 3000]
--domain Set source input from which domain, without protocol and www.
--title Prepend title, use no-title to disable.
--footer Append footer, use no-footer to disable. [默认值: true]
--toc Include TOC
--rename, -R New name, with extension.
--output, -O Location for output.
--available-formats, -A List all supported formats
再看看我们有哪些格式可以使用
$ semo read --available-formats
Supported formats: --format=[FORMAT]
格式 : 说明 : 别名
markdown : Markdown 格式 : md
debug : 查看识别到的中间 HTML 结果 :
console : 终端直接输出 :
clipboard : 输出到剪切板 :
editor : Markdown 的编辑器 基于国产的 Vditor :
epub : EPUB 格式,基于 Pandoc :
mobi : MOBI 格式,基于 Calibre 的 ebook-convert :
pdf : PDF 格式,基于 puppeteer :
png : PNG 格式,基于 puppeteer :
jpeg : JPEG 格式,基于 puppeteer : jpg
html : Markdown 转 HTML 格式,基于 puppeteer :
wechat : 基于 Markdown 的微信公众号文章编辑器,基于国产的 Markdown Nice :
看到 markdown, html 这些还好理解,哪些什么 wechat 到底是什么鬼?这个,后面会给大家展示。
把网文存成 Markdown 文件,我要存档
现在有什么静态博客工具,我们不仅可以用来做博客,也可以用来做资料库,里面的每篇文章可以都是大牛的文章(当然这种就不建议你实际部署到网上了,自己看可以),用这个插件可以帮你搞定。
我这里随便找了一篇掘金的文章,大家也可以试试别的:
semo read https://juejin.im/post/6844904191257739272 --format=markdown
这里的 --format=markdown
由于是默认值,也可以不写,这样执行以后,顺利的话,你就能在当前目录找到以文章 title 命令的 Markdown
文档了。
如果不想存放到当前目录,可以用 --output
指定位置,如果不想每次都指定一遍,你就可以用 Semo 的全局配置来设置了,比如我的配置是:
semo-plugin-read:
output: /Users/semo/Downloads/webclips
也可以用命令行做到这一点:
semo config set semo-plugin-read.output /Users/semo/Downloads/webclips -g
其他选项也可以这么搞,只要是你不经常改的选项,而且即使这里设置了,只要命令执行时传的参数还是优先的。
不存到本地文件,只存到剪切板吧
如果你不是用静态博客工具或者 Github 参数来收集资料,你可能也用不到存储的 Markdown 文件,如果用有道云笔记来存 Markdown 也是很香的,咱们可以这样传参:
semo read https://juejin.im/post/6844904191257739272 --format=clipboard
如果大家觉得每次输入命令时还得输入地址,太麻烦,那么不填也可以,但是需要把地址放到剪切板
semo read --clipboard --format-clipboard
这样就是一个从剪切板取地址,处理后再存到剪切板的效果了,另外,这里输入的剪切板不仅可以是 URL,弄一段 HTML 也是可以的。
我还是更喜欢 PDF 怎么办
那必须得安排,这里为了保证生成 PDF 的效果,没有采用浏览器内的得打印保存 PDF 的方案,而是用 Puppeteer
的特性,先渲染再导出的,跟其他方案相比,PDF 的分页一般不会有切割内容断字的情况。
semo read https://juejin.im/post/6844904191257739272 --format=pdf
同时,这里也支持生成 png, jpeg 和 html 文档。
我还想再改改再存
说实话,自动解析的效果不是百分之百有效的,所以最好还是校对和修改一下,如果你手头没有趁手的 'Markdown' 编辑器(虽然这种情况几乎不存在),这里可以给你提供一个
semo read https://juejin.im/post/6844904191257739272 --format=editor --proxy
由于掘金的同学开启了防盗链,本地起的 Web 服务在预览时显示不出来图像,加了 --proxy
就可以了把那些图片都代理一下,就能显示出来了。
我想发微信公众号文章,美化一下
安排,必须安排。其实掘金有相当的小伙伴都已经用 mdnice.com
的编辑器了,这里给大家一个离线版,用法和上面的 editor 类似。
semo read https://juejin.im/post/6844904191257739272 --format=wechat --proxy
这里有点儿没弄好,首次打开会白屏,再刷新一下就好了。
这个编辑器还是很不错的,如果就是想随手谢谢 Markdown,也可以不传 URL
semo read --format=wechat
如果嫌每次输入 --format=wechat
太麻烦,可以把这个写到全局配置:
semo config set format wechat -g
这样以后,直接 semo read
就开启了一个 Mardown 编辑器,是不是很爽呀?
我比较喜欢用苹果的 Books
软件读 epub
格式的电子书
这里是基于 pandoc
从 Markdown 生成的,如果没安装可以装一下先。
brew install pandoc
semo read https://juejin.im/post/6844904191257739272 --format=editor --epub --toc
我比较喜欢 Kindle 来读 mobi 格式的电子书
这里是基于 Calibre
的 ebook-convert
生成的,需要先安装 Calibre
semo read https://juejin.im/post/6844904191257739272 --format=editor --mobi
这里有的 BUG,ebook-convert
不支持解析远程图片,这个很不方便,所以推荐大家先转换成 epub
格式,然后再把 epub
转成 mobi
ebook-convert a.epub b.mobi
比较少用的格式 debug
和 console
这两种都是把解析结果输出到命令行,用处不是很大,就不细说了。
关于适用范围和限制
除了掘金,也可以试试别的网页,比如 csdn
, 博客园
或者一些大牛的私人博客等等,不支持的主要是那些 Ajax 渲染的文章,比如 infoq
。另外,能识别的也不一定识别的很完美,需要通过 read 的 domain 插件做解析的预处理和后处理,都是一些正则替换,这部分还有很多工作要做,后面会重点把大家常用的几个网站的解析规则弄好,也需要大家的支持和帮助。
最后
虽然作者在这个项目上也投入了很多时间,但是更重要的是验证和展示 Semo
的能力,比如这里可以看出 Semo
可以实现插件,以及插件的插件的效果, 很多时候 Semo
的能力扩展都是用实际的业务场景倒逼出来的,所以欢迎大家使用,和给我提意见。
--- 特别鸣谢在本文中出场的这篇掘金文章,虽然是随便找的,也是缘分